/*
 *游戏场景：创建游戏运行时所需的左右角色
 * 然后提供一个方法，支配所有的角色执行
 * 
 * */
(function(window) {

	window.gameScene = gameScene;
	/*
	 *
	 * 对象配置
	 * 	绘制上下文：ctx
	 *  创建角色所需的所有图像 ：imgs:object
	 * 
	 * */
	function gameScene(options) {
		this.ctx = options.ctx;
		this.imgs = options.imgs;
		//存储游戏运行时所需的所有角色
		this.results = [];
		this.creatRoles();

		//小鸟死亡时，要执行的所有回调函数
		this.birdDieCallbackList = [];
	}
	/*
	 *给游戏场景对象的原型添加方法
	 * 1，创建角色的方法
	 * 2，支配所有角色的方法
	 * 3，小鸟是否死亡的方法
	 * */
	util.extend(gameScene.prototype, {
		//1，创建角色的方法
		creatRoles: function() {
			//创建大背景图对象
			for(var i = 0; i < 2; i++) {
				this.results.push(new backGround({
					ctx: this.ctx,
					img: this.imgs.sky
				}));
			}
			//创建管道对象
			for(var i = 0; i < 7; i++) {
				this.results.push(new loadPipe({
					ctx: this.ctx,
					imgDown: this.imgs.pipeDown,
					imgUp: this.imgs.pipeUp,
					minHeight: 50,
					maxHeight: this.ctx.canvas.height - this.imgs.land.height - 200
				}));
			}
			//创建土地对象
			for(var i = 0; i < 4; i++) {
				this.results.push(new loadLand({
					ctx: this.ctx,
					img: this.imgs.land
				}));
			}

			//创建时间对象
			this.results.push(new loadTime({
				ctx: this.ctx
			}));

			//创建小鸟对象
			this.results.push(new loadBird({
				ctx: this.ctx,
				img: this.imgs.birds,
				frameWidth: 3,
				frameHeight: 1
			}));
		},
		//让所有的角色一句游戏的延迟时间进行响应
		run: function(delaySecond) {
			this.results.forEach(function(role) {
				role.draw();
				role.update(delaySecond);
			});
			//判断小鸟有没有死亡，如果死亡，则执行其他函数
			if(this.isBirdDie()){
				this.runBirdDieCBK();
			}
		},
		//小鸟是否死亡的方法
		isBirdDie: function() {
			//判断小鸟有没有死亡，死亡则停止计时器，并且跳出该函数
			var bird = this.results[this.results.length - 1];
			var birdCoreX = bird.x + bird.width / 2;
			var birdCoreY = bird.y + bird.height / 2;
			//
			if(birdCoreY < 0 || birdCoreY > (this.ctx.canvas.height - this.imgs.land.height) ||
				ctx.isPointInPath(birdCoreX, birdCoreY)) {
				return true;
			} else {
				return false;
			}
		},
		//添加一个加载回调的方法
		addBirdDieCBK: function(fn) {
			this.birdDieCallbackList.push(fn);
		},
		//执行小鸟死亡时所有的回调的方法
		runBirdDieCBK:function(){
			this.birdDieCallbackList.forEach(function(fn){
				fn();
			})
		}
	})
}(window))